package com.cmxh.cloundnote.util;

import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 只要是@Controller修饰类 方法抛出的异常 都会进入这个类的
 */
@ControllerAdvice
@RestControllerAdvice
public class MyExceptionHandler {


    /**
     * 只要Controller层的方法抛出的异常 不管是何种类型的异常 都走这个代码
     * 不管我们抛出何种异常 都是Exception类的子类
     *
     * @return
     */
    @ExceptionHandler(Exception.class)
    // 将Result格式化成json字符串
    @ResponseBody
    public Result xx(Exception e) {
        e.printStackTrace();// 将web层抛出的异常捕获，并且打印在控制台(以后会把异常信息打印在文件中)
        return new Result(Code.NULL_ERR, "服务器出问题了,稍后再试");
    }

    public Result xx(MethodArgumentNotValidException e) {
        Map<String, String> map = new HashMap<>();
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        for (FieldError item : fieldErrors) {
            String field = item.getField();//属性名
            String defaultMessage = item.getDefaultMessage();
            map.put(field, defaultMessage);

        }
        return new Result(Code.NULL_ERR, map, "数据校验出现问题");
    }

}
